import axios from "axios";
import { userStore } from '@/stores'
import router from '@/router'
// 这里的axios.create 是创建一个单独的axios实例，
const instance = axios.create({
    // TODO 1. 基础地址，超时时间
  baseURL: 'https://some-domain.com/api/',
  timeout: 5000,
});
// 添加请求拦截器
instance.interceptors.request.use( (config) => {
  // 在发送请求之前做些什么
  //携带token
  const store = userStore()
  if (store.user.token) {
    config.headers.Authorization = `Bearer ${store.user.token}`;
  }
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
//// 响应拦截器：一般做 1.数据脱壳处理，2.业务成功业务失败，3.401token失效的处理
instance.interceptors.response.use( (response)  => {
  // 2xx 范围内的状态码都会触发该函数。
  // 对响应数据做点什么
  if (业务成功) {
    // 脱壳
    return response.data
  } else {
    // 业务失败
    //提示个错误
    return Promise.reject(res)
  }
}, 
 (error)  => {
  // 超出 2xx 范围的状态码都会触发该函数。
  // 对响应错误做点什么
  // // 下面这里的函数是请求失败，http状态码是 4xx 5xx
  // 401 token失效，需要重新登录
  if (error.response?.status === 401) {
    // 进入了这里表示token 失效了，应该退出到登录界面，并且将token还有本地储存等数据清空
    const store = userStore()
    store.delUser()
    router.push('/login')
    return Promise.reject(error)
  }
  // 不是401就给个错误提示，在返回失败的promise
  return Promise.reject(error);
});
export default instance